import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import com.colloquial.arithcode.ArithDecoder;
import com.colloquial.arithcode.BitInput;


public class Decodificador {

	private static Decodificador instanceOfDecodificador;
	
	private FileInputStream inStream;

	private ArithDecoder decodificador;

	private Decodificador(String arquivo) {

		inStream = null;
		try {
			inStream = new FileInputStream(arquivo);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}

		try {
			decodificador = new ArithDecoder(new BitInput(inStream));
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public static Decodificador getInstance(String arquivo) {
		if( instanceOfDecodificador == null) {
			instanceOfDecodificador = new Decodificador(arquivo);
		}
		return instanceOfDecodificador;
	}

	public static Decodificador getInstance() {
		if(instanceOfDecodificador == null) {
			instanceOfDecodificador = new Decodificador("compressed.iti");
		}
		return instanceOfDecodificador;
	}


	public int decodificar(int totalCount) {
		return decodificador.getCurrentSymbolCount(totalCount);
	}
	
	

	public void retirarSimbolo(int []dados) {
		try {
			decodificador.removeSymbolFromStream(dados);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public boolean close(){
		try {
			this.decodificador.close();

			inStream.close();
		} catch (IOException e) {
			return false;
		}
		return true;
	}

}

